package com.sinosoft.cpyy.config.mybatis.master;

import com.sinosoft.cpyy.config.mybatis.plguin.SQLMonitorPlugin;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.MybatisProperties;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.*;

import javax.sql.DataSource;

/**
 * 创建时间：2018/三月/27
 *
 * @author 张政[zhang_zheng@sinosoft.com.cn]
 * 类名：MasterMybatisConfiguration
 * 描述：Mybatis配置
 */
@Configuration
@MapperScan(basePackages = "com.sinosoft.cpyy.dao.master", sqlSessionFactoryRef = "masterSqlSessionFactory")
@Slf4j
public class MasterMybatisConfiguration {
    /**
     * 创建主数据源的 SqlSessionFactory
     */
    @Bean
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource,
                                                     MybatisProperties mybatisProperties) throws Exception {
        mybatisProperties.getConfiguration().addInterceptor(new SQLMonitorPlugin());
        log.info("开始创建 master 数据源 Mybatis 核心 SqlSessionFactory");
        // 1、创建 Mybatis 的 SqlSessionFactoryBean
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 2、对创建 SqlSessionFactoryBean 设置数据源
        sqlSessionFactoryBean.setDataSource(masterDataSource);
        // 3、设置 Mapper 的 XML 所在目录
        sqlSessionFactoryBean.setMapperLocations(mybatisProperties.resolveMapperLocations());
        // 4、设置对其的配置
        sqlSessionFactoryBean.setConfiguration(mybatisProperties.getConfiguration());
        log.info("已创建 master 数据源 Mybatis 核心 SqlSessionFactory");
        return sqlSessionFactoryBean.getObject();
    }
}